home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 August / August CD.bin / Shareware / Education / numericalmethods Folder / chap_11 / qr2.m < prev   
Encoding:
Text File  |  1994-06-05  |  902 b   |  38 lines  |  [MATF/MATL]

  1. function D = qr2(A,epsilon,show)
  2. % D = qr2(A,epsilon,show)
  3. % To find the eigenvalues of a symmetric tridigonal matrix.
  4. % The QR method is employed.
  5. % A is an n x n symmetric matrix, input.
  6. % epsilon is the tolerance, input.
  7. % D is the vector of eigenvalues, output.
  8. if nargin==2, show = 0; end
  9. [n,n] = size(A);
  10. k = 1;
  11. m = n;
  12. cnt = 0;
  13. while m > 1
  14.   S = A(m-1:m,m-1:m);
  15.   if abs(S(2,1)) < epsilon*(abs(S(1,1)) + abs(S(2,2)))
  16.     A(m,m-1) = 0;
  17.     A(m-1,m) = 0;
  18.     m = m-1;
  19.   else
  20.     shift = eig(S);
  21.     if abs(shift(1)-A(m,m))<abs(shift(2)-A(m,m))
  22.       shift = shift(1); 
  23.     else
  24.       shift = shift(2); 
  25.     end
  26.     [Q,R] = qr(A-shift*eye(n));
  27.     A = R*Q + shift*eye(n);
  28.     cnt = cnt+1;
  29.     if show==1,
  30.       home,  if cnt==1, clc; end;
  31.       disp(''),disp(['Symmetric tridiagonal QR iteration No. ',...
  32.       int2str(cnt)]),disp(''),disp(A),pause(0.75);
  33.     end
  34.   end
  35.   k = k+1;
  36. end
  37. D = diag(A);
  38.